home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-04 / zbpc_460.zip / GAMES.EXE / LIFE.BAS < prev   
BASIC Source File  |  1990-06-16  |  3KB  |  77 lines

  1. 00010 CLS : PRINT TAB(18); "LIFE" : GOSUB "INSTRUCTIONS"
  2. 00020 H = 70 : V = 22 : X1 = 1 : Y1 = 1 : X2 = V : Y2 = H
  3. 00030 DIM A(22,70), 80 B$(22), UBOUND(10) : C = 0 : G = 1
  4. 00040 DO
  5. 00050   C = C + 1
  6. 00060   LINE INPUT "-> "; B$(C)
  7. 00070   A$ = UCASE$(B$(C))
  8. 00080 UNTIL A$ = "DONE" OR C = 22
  9. 00090 B$(C) = "" : C = C - 1
  10. 00100 CLS
  11. 00110 FOR X = 1 TO C - 1
  12. 00120   IF LEN(B$(X)) > L THEN L = LEN(B$(X))
  13. 00130 NEXT X
  14. 00140 ' FIND EDGES OF COLONY
  15. 00150 X1 = INT((V-X)/2)
  16. 00160 Y1 = INT((H-L)/2)
  17. 00170 ' COUNT POPULATION
  18. 00180 FOR X = 1 TO C
  19. 00190   FOR Y = 1 TO LEN(B$(X))
  20. 00200     A$ = MID$(B$(X),Y,1)
  21. 00210     IF A$ <> " " THEN A(X1+X,Y1+Y) = 1 : P = P + 1
  22. 00220   NEXT Y
  23. 00230 NEXT X
  24. 00240 ' PRINT OUT SCREEN
  25. 00250 WHILE LEN(INKEY$) = 0
  26. 00260   LOCATE 0,0 : CLS LINE
  27. 00270   PRINT "GENERATION:"; G; " POPULATION:"; P;: IF I9 THEN PRINT " INVALID";
  28. 00280   X3 = V : Y3 = H : X4 = 1 : Y4 = 1
  29. 00290   G = G + 1
  30. 00300 FOR X = 1 TO X1 - 1 : PRINT : NEXT X : REM BLANK LINES ABOVE COLONY
  31. 00310   FOR X = X1 TO X2 : REM VERTICAL AREA OF THE COLONY
  32. 00320     PRINT : CLS LINE
  33. 00330     FOR Y = Y1 TO Y2 : REM HORIZONTAL AREA OF THE COLONY
  34. 00340       IF A(X,Y) = 2 THEN A(X,Y) = 0 : GOTO 420
  35. 00350       IF A(X,Y) = 3 THEN A(X,Y) = 1 : GOTO 370
  36. 00360       IF A(X,Y) <> 1 THEN 420
  37. 00370       PRINT TAB(Y); "*";: ' PRINT ONE CELL
  38. 00380       IF X < X3 THEN X3 = X
  39. 00390       IF X > X4 THEN X4 = X
  40. 00400       IF Y < Y3 THEN Y3 = Y
  41. 00410       IF Y > Y4 THEN Y4 = Y
  42. 00420     NEXT Y
  43. 00430   NEXT X
  44. 00440   IF P = 0 THEN "QUIT"
  45. 00450   ' EVOLVE & CHECK FOR GROWTH PAST EDGES
  46. 00460   X1 = X3 : X2 = X4 : Y1 = Y3 : Y2 = Y4
  47. 00470   IF X1 < 3 THEN X1 = 3 : I9 = -1
  48. 00480   IF X2 > (V-2) THEN X2 = (V-2) : I9 = -1
  49. 00490   IF Y1 < 3 THEN Y1 = 3 : I9 = -1
  50. 00500   IF Y2 > (H-2) THEN Y2 = (H-2) : I9 = -1
  51. 00510   P = 0
  52. 00520   FOR X = X1 - 1 TO X2 + 1
  53. 00530     FOR Y = Y1 - 1 TO Y2 + 1
  54. 00540       C = 0
  55. 00550       FOR I = X - 1 TO X + 1
  56. 00560         FOR J = Y - 1 TO Y + 1
  57. 00570           IF A(I,J) = 1 OR A(I,J) = 2 THEN C = C + 1
  58. 00580         NEXT J
  59. 00590       NEXT I
  60. 00600       LONG IF A(X,Y) = 0
  61. 00610         IF C = 3 THEN A(X,Y) = 3 : P = P + 1
  62. 00620       XELSE
  63. 00630         IF C < 3 OR C > 4 THEN A(X,Y) = 2 ELSE P = P + 1
  64. 00640       END IF
  65. 00650     NEXT Y
  66. 00660   NEXT X
  67. 00670   X1 = X1 - 1 : Y1 = Y1 - 1 : X2 = X2 + 1 : Y2 = Y2 + 1
  68. 00680 WEND : ' LOOP UNTIL NO POPULATION OR KEYPRESS
  69. 00690 "QUIT" END
  70. 00700 "INSTRUCTIONS"
  71. 00710 PRINT : PRINT "ENTER A STARTING DESIGN OF ASTERISKS."
  72. 00720 PRINT "USE A MAXIMUM OF ONE LINE,"
  73. 00730 PRINT "   PRESS 'RETURN' TO END THE LINE."
  74. 00740 PRINT "BE SURE CAPS LOCK IS ON," 
  75. 00750 PRINT "   AND ENTER 'DONE' WHEN YOU ARE READY."
  76. 00760 PRINT : RETURN
  77.